"""
初始化数据脚本
"""
import asyncio
import sys
from pathlib import Path

# 添加项目根目录到路径
sys.path.insert(0, str(Path(__file__).parent.parent))

from app.db.session import async_session
from app.models.user import AdminUser, Role
from app.core.security import get_password_hash


async def init_admin_user():
    """创建初始管理员用户"""
    async with async_session() as db:
        # 创建超级管理员角色
        role = Role(
            name="超级管理员",
            description="拥有所有权限",
            permissions=["*"]
        )
        db.add(role)
        await db.flush()
        
        # 创建管理员用户
        admin = AdminUser(
            username="admin",
            email="admin@winstech.com",
            password_hash=get_password_hash("admin123"),
            nickname="系统管理员",
            role_id=role.id,
            status=1
        )
        db.add(admin)
        
        await db.commit()
        
        print("✓ 初始管理员创建成功！")
        print(f"  用户名: {admin.username}")
        print(f"  密码: admin123")
        print(f"  请登录后立即修改密码！")


async def init_sample_data():
    """创建示例数据"""
    async with async_session() as db:
        from app.models.content import (
            Banner, ProductCategory, Product, 
            NewsCategory, News
        )
        from datetime import datetime
        
        # 创建Banner
        banners = [
            Banner(
                title="欢迎来到WinsTech",
                subtitle="领先的科技解决方案提供商",
                image_url="/static/uploads/banner1.jpg",
                sort_order=1,
                status=1
            ),
            Banner(
                title="创新驱动未来",
                subtitle="用技术改变世界",
                image_url="/static/uploads/banner2.jpg",
                sort_order=2,
                status=1
            )
        ]
        db.add_all(banners)
        
        # 创建产品分类
        product_category = ProductCategory(
            name="企业软件",
            sort_order=1
        )
        db.add(product_category)
        await db.flush()
        
        # 创建产品
        product = Product(
            category_id=product_category.id,
            name="智能管理系统",
            subtitle="高效、智能的企业管理解决方案",
            cover_image="/static/uploads/product1.jpg",
            summary="一款专为企业打造的智能管理系统",
            content="<p>详细的产品介绍...</p>",
            status=1
        )
        db.add(product)
        
        # 创建新闻分类
        news_category = NewsCategory(
            name="公司动态",
            sort_order=1
        )
        db.add(news_category)
        await db.flush()
        
        # 创建新闻
        news = News(
            category_id=news_category.id,
            title="公司获得行业大奖",
            cover_image="/static/uploads/news1.jpg",
            summary="WinsTech荣获2023年度最佳科技创新奖",
            content="<p>新闻详细内容...</p>",
            author="编辑部",
            publish_time=datetime.now(),
            status=1
        )
        db.add(news)
        
        await db.commit()
        
        print("✓ 示例数据创建成功！")


async def main():
    """主函数"""
    print("开始初始化数据...")
    
    try:
        await init_admin_user()
        await init_sample_data()
        print("\n所有数据初始化完成！")
    except Exception as e:
        print(f"\n✗ 初始化失败: {e}")
        import traceback
        traceback.print_exc()


if __name__ == "__main__":
    asyncio.run(main())

